#include "CFDPostGUIDialogManager.h"
#include "CFDPostGUIDialogBase.h"

namespace GUI
{
// GUIDialogManager的单例实例初始化为nullptr
CFDPostGUIDialogManager *CFDPostGUIDialogManager::_instance = nullptr;

// 当对话框创建时调用此函数，将其添加到管理列表中
void CFDPostGUIDialogManager::dialogCreated(CFDPostGUIDialogBase *dlg, QString uniqueFlag)
{
    if (_dialogList.contains(dlg))
        return;
    _dialogList.append(dlg);

    if (uniqueFlag.isEmpty()) return;
    if (!_dialogHash.contains(uniqueFlag)) {
        _dialogHash.insert(uniqueFlag, nullptr);
    }
    auto dialog = _dialogHash.value(uniqueFlag, nullptr);

    if (dialog != nullptr) {
        dialog->setAttribute(Qt::WA_DeleteOnClose, false);
        dialog->close();
        delete dialog;
        dialog = nullptr;
    }
    _dialogHash[uniqueFlag] = dlg;
}

// 当对话框销毁时调用此函数，将其从管理列表中移除
void CFDPostGUIDialogManager::dialogDestoried(CFDPostGUIDialogBase *dlg)
{
    if (!_dialogList.contains(dlg))
        return;
    _dialogList.removeOne(dlg);
    // 删除对话框的时候将hash中的value设置nullptr
    auto it = _dialogHash.constBegin();
    while (it != _dialogHash.constEnd()) {
        if (it.value() == dlg) {
            _dialogHash[it.key()] = nullptr;
        }
        ++it;
    }
}

// 获取当前所有存活的对话框列表
QList<CFDPostGUIDialogBase *> CFDPostGUIDialogManager::getAllDialogs()
{
    return _dialogList;
}
} // namespace GUI
